Python Subprocess with .bashrc

Python 调用 Shell 使用 subprocess 即可

(注意: 依照官方文档,使用 subprocess 替换 os.system, os.spawn*, os.popen*, popen2.*, commands.*)

但直接执行 .bashrc 里的命令并不成功,原因没有显示指出需要读取配置

bash 中的读取指令为:

1
/bin/bash -i -c

如下为正确处理方式:

例如 .bashrc 里有 alias saverm=rm -i

1
2
3
4
5
import subprocess as sp
sp.call("/bin/bash -i -c saverm ./", shell=True)
# or use Popen
# p = sp.Popen(["/bin/bash", "-i", "-c", "saverm ./"])
# p.communicate()

简要说明一下,call 其实是封装了 Popen,是同步的(等待子进程完成),
可参考Vamei 的博客

注意:暴露 shell 是相当危险的,比如在 web 下暴露可能被执行 rm 指令

参考并特别感谢 stackoverflow 的解答